--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/backend/test_favourites_layout.py 3f7ef731b5effd9aa3a81eceea66fd6c2b56498c (3f7ef731) Text, 11.04 KB
T8b949e# SPDX-License-Identifier: 0BSD
Tff7b72import T7ee787json
Tff7b72import T7ee787shutil
Tff7b72import T7ee787tempfile
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3AsyncMockTb4b4b4, Te6edf3MagicMockTb4b4b4, Te6edf3patch
Tff7b72import T7ee787pytest
Tff7b72import T7ee787RNS
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3HealthCheckTb4b4b4, Te6edf3givenTb4b4b4, Te6edf3settings
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3strategies Tff7b72as Te6edf3st
Tff7b72from T7ee787meshchatxT7ee787.T7ee787meshchat Tff7b72import Te6edf3ReticulumMeshChat
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787favourites_layout Tff7b72import Tb4b4b4(
Te6edf3MAX_HASH_LENTb4b4b4,
Te6edf3MAX_HASHES_PER_SECTIONTb4b4b4,
Te6edf3MAX_LAYOUT_JSON_BYTESTb4b4b4,
Te6edf3MAX_SECTION_ID_LENTb4b4b4,
Te6edf3MAX_SECTION_NAME_LENTb4b4b4,
Te6edf3MAX_SECTIONSTb4b4b4,
Te6edf3MAX_TOTAL_HASHESTb4b4b4,
Te6edf3layout_payload_too_largeTb4b4b4,
Te6edf3normalize_favourites_layoutTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_normalize_favourites_layout_rejects_invalidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3normalize_favourites_layoutTb4b4b4(Tff7b72NoneTb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3normalize_favourites_layoutTb4b4b4(Tb4b4b4{Tb4b4b4}Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3normalize_favourites_layoutTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4}Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3normalize_favourites_layoutTb4b4b4(Tb4b4b4[Tb4b4b4]Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3normalize_favourites_layoutTb4b4b4(Ta5d6ff"Ta5d6ffnopeTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72def Td2a8fftest_normalize_favourites_layout_sanitizesTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3layout Tff7b72= Te6edf3normalize_favourites_layoutTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4: Tb4b4b4[
Tb4b4b4{Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdefaultTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffFavouritesTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcollapsedTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4}Tb4b4b4,
Tb4b4b4{Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffCustomTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcollapsedTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4}Tb4b4b4,
Tb4b4b4{Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdefaultTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdupTa5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffsectionOrderTa5d6ff"Tb4b4b4: Tb4b4b4[Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmissingTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4: Tb4b4b4[Ta5d6ff"Ta5d6ffabcTa5d6ff"Tb4b4b4, T79c0ff12Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fforphanTa5d6ff"Tb4b4b4: Tb4b4b4[Ta5d6ff"Ta5d6ffxTa5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3layout Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Tb4b4b4[Te6edf3sTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4] Tff7b72for Te6edf3s Tff7b72in Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4]Tb4b4b4] Tff7b72== Tb4b4b4[Ta5d6ff"Ta5d6ffdefaultTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4]
Tff7b72assert Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6ffsectionOrderTa5d6ff"Tb4b4b4] Tff7b72== Tb4b4b4[Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdefaultTa5d6ff"Tb4b4b4]
Tff7b72assert Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4] Tff7b72== Tb4b4b4[Ta5d6ff"Ta5d6ffabcTa5d6ff"Tb4b4b4]
Tff7b72assert Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffdefaultTa5d6ff"Tb4b4b4] Tff7b72== Tb4b4b4[Tb4b4b4]
Tff7b72assert Ta5d6ff"Ta5d6fforphanTa5d6ff" Tff7b72not Tff7b72in Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4]
Tff7b72def Td2a8fftest_normalize_rejects_prototype_pollution_keysTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3layout Tff7b72= Te6edf3normalize_favourites_layoutTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4: Tb4b4b4[
Tb4b4b4{Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff__proto__Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffbadTa5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4{Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffconstructorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffbadTa5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4{Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffGoodTa5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffsectionOrderTa5d6ff"Tb4b4b4: Tb4b4b4[Ta5d6ff"Ta5d6ff__proto__Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ff__proto__Ta5d6ff"Tb4b4b4: Tb4b4b4[Ta5d6ff"Ta5d6ffaTa5d6ff" Tff7b72* T79c0ff32Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tb4b4b4[Ta5d6ff"Ta5d6ffbTa5d6ff" Tff7b72* T79c0ff32Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3layout Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Tb4b4b4[Te6edf3sTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4] Tff7b72for Te6edf3s Tff7b72in Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4]Tb4b4b4] Tff7b72== Tb4b4b4[Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4]
Tff7b72assert Ta5d6ff"Ta5d6ff__proto__Ta5d6ff" Tff7b72not Tff7b72in Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4]
Tff7b72assert Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4] Tff7b72== Tb4b4b4[Ta5d6ff"Ta5d6ffbTa5d6ff" Tff7b72* T79c0ff32Tb4b4b4]
Tff7b72def Td2a8fftest_normalize_enforces_capsTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3sections Tff7b72= Tb4b4b4[
Tb4b4b4{Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Ta5d6fffTa5d6ff"Ta5d6ffsTffd700{Te6edf3iTffd700}Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffxTa5d6ff" Tff7b72* Tb4b4b4(Te6edf3MAX_SECTION_NAME_LEN Tff7b72+ T79c0ff20Tb4b4b4)Tb4b4b4}
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3MAX_SECTIONS Tff7b72+ T79c0ff10Tb4b4b4)
Tb4b4b4]
Te6edf3hashes Tff7b72= Tb4b4b4[Ta5d6fffTa5d6ff"Tffd700{Te6edf3iTffd700:Ta5d6ff032xTffd700}Ta5d6ff" Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3MAX_HASHES_PER_SECTION Tff7b72+ T79c0ff50Tb4b4b4)Tb4b4b4]
Te6edf3layout Tff7b72= Te6edf3normalize_favourites_layoutTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4: Te6edf3sectionsTb4b4b4,
Ta5d6ff"Ta5d6ffsectionOrderTa5d6ff"Tb4b4b4: Tb4b4b4[Te6edf3sTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4] Tff7b72for Te6edf3s Tff7b72in Te6edf3sectionsTb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4: Tb4b4b4{Te6edf3sectionsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4: Te6edf3hashesTb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3layout Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72== Te6edf3MAX_SECTIONS
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72== Te6edf3MAX_SECTION_NAME_LEN
Tff7b72assert Tb4b4b4(
Tffa657lenTb4b4b4(Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4]Tb4b4b4[Te6edf3sectionsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4]Tb4b4b4) Tff7b72== Te6edf3MAX_HASHES_PER_SECTION
Tb4b4b4)
Tff7b72def Td2a8fftest_normalize_enforces_total_hash_capTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3sections Tff7b72= Tb4b4b4[Tb4b4b4{Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Ta5d6fffTa5d6ff"Ta5d6ffsTffd700{Te6edf3iTffd700}Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6fffTa5d6ff"Ta5d6ffSTffd700{Te6edf3iTffd700}Ta5d6ff"Tb4b4b4} Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(T79c0ff4Tb4b4b4)Tb4b4b4]
Te6edf3per Tff7b72= Tb4b4b4(Te6edf3MAX_TOTAL_HASHES Tff7b72/Tff7b72/ T79c0ff4Tb4b4b4) Tff7b72+ T79c0ff10
Te6edf3layout Tff7b72= Te6edf3normalize_favourites_layoutTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4: Te6edf3sectionsTb4b4b4,
Ta5d6ff"Ta5d6ffsectionOrderTa5d6ff"Tb4b4b4: Tb4b4b4[Te6edf3sTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4] Tff7b72for Te6edf3s Tff7b72in Te6edf3sectionsTb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4: Tb4b4b4{
Te6edf3sTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4: Tb4b4b4[Ta5d6fffTa5d6ff"Tffd700{Te6edf3sTb4b4b4[Ta5d6ff'Ta5d6ffidTa5d6ff'Tb4b4b4]Tffd700}Tffd700{Te6edf3iTffd700:Ta5d6ff028xTffd700}Ta5d6ff"Tb4b4b4[Tb4b4b4:T79c0ff32Tb4b4b4] Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3perTb4b4b4)Tb4b4b4]
Tff7b72for Te6edf3s Tff7b72in Te6edf3sections
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3layout Tff7b72is Tff7b72not Tff7b72None
Te6edf3total Tff7b72= Tffa657sumTb4b4b4(Tffa657lenTb4b4b4(Te6edf3vTb4b4b4) Tff7b72for Te6edf3v Tff7b72in Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72assert Te6edf3total Tff7b72<Tff7b72= Te6edf3MAX_TOTAL_HASHES
Tff7b72def Td2a8fftest_normalize_dedupes_hashes_and_trimsTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3layout Tff7b72= Te6edf3normalize_favourites_layoutTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4{Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff default Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff Name Ta5d6ff"Tb4b4b4}Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffsectionOrderTa5d6ff"Tb4b4b4: Tb4b4b4[Ta5d6ff"Ta5d6ff default Ta5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffdefaultTa5d6ff"Tb4b4b4: Tb4b4b4[Ta5d6ff"Ta5d6ff abc Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffabcTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffxTa5d6ff" Tff7b72* Tb4b4b4(Te6edf3MAX_HASH_LEN Tff7b72+ T79c0ff5Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffdefaultTa5d6ff"
Tff7b72assert Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff Name Ta5d6ff"Tb4b4b4[Tb4b4b4:Te6edf3MAX_SECTION_NAME_LENTb4b4b4]
Tff7b72assert Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffdefaultTa5d6ff"Tb4b4b4] Tff7b72== Tb4b4b4[Ta5d6ff"Ta5d6ffabcTa5d6ff"Tb4b4b4]
Tff7b72def Td2a8fftest_layout_payload_too_largeTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3layout_payload_too_largeTb4b4b4(Te6edf3MAX_LAYOUT_JSON_BYTES Tff7b72+ T79c0ff1Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3layout_payload_too_largeTb4b4b4(Te6edf3MAX_LAYOUT_JSON_BYTESTb4b4b4) Tff7b72is Tff7b72False
Tff7b72assert Te6edf3layout_payload_too_largeTb4b4b4(Ta5d6ff"Ta5d6ffnopeTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72assert Te6edf3layout_payload_too_largeTb4b4b4(Tff7b72-T79c0ff1Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3layout_payload_too_largeTb4b4b4(Ta5d6ff"Ta5d6ff-5Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_normalize_rejects_null_bytes_in_ids_and_hashesTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3layout Tff7b72= Te6edf3normalize_favourites_layoutTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4: Tb4b4b4[
Tb4b4b4{Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffokTffea00\x00Ta5d6ffevilTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffbadTa5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4{Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffgoodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffGoodTa5d6ff"Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffsectionOrderTa5d6ff"Tb4b4b4: Tb4b4b4[Ta5d6ff"Ta5d6ffokTffea00\x00Ta5d6ffevilTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffgoodTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffgoodTa5d6ff"Tb4b4b4: Tb4b4b4[Ta5d6ff"Ta5d6ffabTffea00\x00Ta5d6ffcdTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffaabbccddeeff00112233445566778899Ta5d6ff"Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3layout Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Tb4b4b4[Te6edf3sTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4] Tff7b72for Te6edf3s Tff7b72in Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4]Tb4b4b4] Tff7b72== Tb4b4b4[Ta5d6ff"Ta5d6ffgoodTa5d6ff"Tb4b4b4]
Tff7b72assert Te6edf3layoutTb4b4b4[Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffgoodTa5d6ff"Tb4b4b4] Tff7b72== Tb4b4b4[
Ta5d6ff"Ta5d6ffaabbccddeeff00112233445566778899Ta5d6ff"Tb4b4b4,
Tb4b4b4]
Tf0883e@givenTb4b4b4(
Te6edf3payloadTff7b72=Te6edf3stTff7b72.Td2a8ffone_ofTb4b4b4(
Te6edf3stTff7b72.Td2a8ffnoneTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8ffbooleansTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8ffintegersTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8ffbinaryTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3stTff7b72.Td2a8fflistsTb4b4b4(Te6edf3stTff7b72.Td2a8ffintegersTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(Te6edf3max_examplesTff7b72=T79c0ff80Tb4b4b4, Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fftoo_slowTb4b4b4]Tb4b4b4)
Tff7b72def Td2a8fftest_normalize_never_throws_on_garbageTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3normalize_favourites_layoutTb4b4b4(Te6edf3payloadTb4b4b4) Tff7b72is Tff7b72None Tff7b72or Tffa657isinstanceTb4b4b4(
Te6edf3normalize_favourites_layoutTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4,
Tffa657dictTb4b4b4,
Tb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3section_idsTff7b72=Te6edf3stTff7b72.Td2a8fflistsTb4b4b4(
Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3min_sizeTff7b72=T79c0ff1Tb4b4b4, Te6edf3max_sizeTff7b72=Te6edf3MAX_SECTION_ID_LEN Tff7b72+ T79c0ff8Tb4b4b4)Tb4b4b4,
Te6edf3min_sizeTff7b72=T79c0ff0Tb4b4b4,
Te6edf3max_sizeTff7b72=Te6edf3MAX_SECTIONS Tff7b72+ T79c0ff5Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3namesTff7b72=Te6edf3stTff7b72.Td2a8fflistsTb4b4b4(
Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=Te6edf3MAX_SECTION_NAME_LEN Tff7b72+ T79c0ff20Tb4b4b4)Tb4b4b4,
Te6edf3max_sizeTff7b72=Te6edf3MAX_SECTIONS Tff7b72+ T79c0ff5Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3hashesTff7b72=Te6edf3stTff7b72.Td2a8fflistsTb4b4b4(Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=Te6edf3MAX_HASH_LEN Tff7b72+ T79c0ff8Tb4b4b4)Tb4b4b4, Te6edf3max_sizeTff7b72=T79c0ff40Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3max_examplesTff7b72=T79c0ff60Tb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fftoo_slowTb4b4b4, Te6edf3HealthCheckTff7b72.Td2a8ffdata_too_largeTb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_normalize_fuzz_structuredTb4b4b4(Te6edf3section_idsTb4b4b4, Te6edf3namesTb4b4b4, Te6edf3hashesTb4b4b4)Tb4b4b4:
Te6edf3sections Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3iTb4b4b4, Te6edf3sid Tff7b72in Tffa657enumerateTb4b4b4(Te6edf3section_idsTb4b4b4)Tb4b4b4:
Te6edf3sectionsTff7b72.Td2a8ffappendTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Te6edf3sidTb4b4b4,
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Te6edf3namesTb4b4b4[Te6edf3iTb4b4b4] Tff7b72if Te6edf3i Tff7b72< Tffa657lenTb4b4b4(Te6edf3namesTb4b4b4) Tff7b72else T79c0ff123Tb4b4b4,
Ta5d6ff"Ta5d6ffcollapsedTa5d6ff"Tb4b4b4: Te6edf3i Tff7b72% T79c0ff2 Tff7b72== T79c0ff0Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3raw Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4: Te6edf3sectionsTb4b4b4,
Ta5d6ff"Ta5d6ffsectionOrderTa5d6ff"Tb4b4b4: Te6edf3section_idsTb4b4b4[Tb4b4b4:Tb4b4b4:Tff7b72-T79c0ff1Tb4b4b4] Tff7b72+ Tb4b4b4[Ta5d6ff"Ta5d6ffmissingTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4: Tffa657dictTff7b72.Td2a8fffromkeysTb4b4b4(Te6edf3section_idsTb4b4b4[Tb4b4b4:T79c0ff3Tb4b4b4]Tb4b4b4, Te6edf3hashesTb4b4b4)Tb4b4b4,
Tb4b4b4}
Te6edf3out Tff7b72= Te6edf3normalize_favourites_layoutTb4b4b4(Te6edf3rawTb4b4b4)
Tff7b72if Te6edf3out Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3outTb4b4b4[Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72<Tff7b72= Te6edf3MAX_SECTIONS
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3outTb4b4b4[Ta5d6ff"Ta5d6ffsectionOrderTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72== Tffa657lenTb4b4b4(Te6edf3outTb4b4b4[Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72assert Tffa657setTb4b4b4(Te6edf3outTb4b4b4[Ta5d6ff"Ta5d6ffsectionOrderTa5d6ff"Tb4b4b4]Tb4b4b4) Tff7b72== Tb4b4b4{Te6edf3sTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4] Tff7b72for Te6edf3s Tff7b72in Te6edf3outTb4b4b4[Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4]Tb4b4b4}
Te6edf3total Tff7b72= T79c0ff0
Tff7b72for Te6edf3sidTb4b4b4, Te6edf3values Tff7b72in Te6edf3outTb4b4b4[Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffitemsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3sid Tff7b72in Tb4b4b4{Te6edf3sTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4] Tff7b72for Te6edf3s Tff7b72in Te6edf3outTb4b4b4[Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4]Tb4b4b4}
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3valuesTb4b4b4) Tff7b72<Tff7b72= Te6edf3MAX_HASHES_PER_SECTION
Tff7b72assert Tffa657lenTb4b4b4(Te6edf3valuesTb4b4b4) Tff7b72== Tffa657lenTb4b4b4(Tffa657setTb4b4b4(Te6edf3valuesTb4b4b4)Tb4b4b4)
Te6edf3total Tff7b72+Tff7b72= Tffa657lenTb4b4b4(Te6edf3valuesTb4b4b4)
Tff7b72assert Te6edf3total Tff7b72<Tff7b72= Te6edf3MAX_TOTAL_HASHES
Tf0883e@pytestTff7b72.Td2a8fffixture
Tff7b72def Td2a8fftemp_dirTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3dir_path Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)
Tff7b72yield Te6edf3dir_path
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3dir_pathTb4b4b4)
Tf0883e@pytestTff7b72.Td2a8fffixture
Tff7b72def Td2a8ffmock_rns_minimalTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Tb4b4b4(
Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffRNS.ReticulumTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3mock_rnsTb4b4b4,
Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffRNS.TransportTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffLXMF.LXMRouterTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.meshchat.get_file_pathTa5d6ff"Tb4b4b4, Te6edf3return_valueTff7b72=Ta5d6ff"Ta5d6ff/tmp/mock_pathTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3mock_rns_instance Tff7b72= Te6edf3mock_rnsTff7b72.Td2a8ffreturn_value
Te6edf3mock_rns_instanceTff7b72.Td2a8ffconfigpath Tff7b72= Ta5d6ff"Ta5d6ff/tmp/mock_configTa5d6ff"
Te6edf3mock_rns_instanceTff7b72.Td2a8ffis_connected_to_shared_instance Tff7b72= Tff7b72False
Te6edf3mock_rns_instanceTff7b72.Td2a8fftransport_enabledTff7b72.Td2a8ffreturn_value Tff7b72= Tff7b72True
Te6edf3mock_id Tff7b72= Te6edf3MagicMockTb4b4b4(Te6edf3specTff7b72=Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4)
Te6edf3mock_idTff7b72.Td2a8ffhash Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fftest_hash_32_bytes_long_01234567Ta5d6ff"
Te6edf3mock_idTff7b72.Td2a8ffhexhash Tff7b72= Te6edf3mock_idTff7b72.Td2a8ffhashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)
Te6edf3mock_idTff7b72.Td2a8ffget_private_keyTff7b72.Td2a8ffreturn_value Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6fftest_private_keyTa5d6ff"
Tff7b72yield Te6edf3mock_id
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_favourites_layout_get_putTb4b4b4(Te6edf3mock_rns_minimalTb4b4b4, Te6edf3temp_dirTb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.meshchat.generate_ssl_certificateTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3app Tff7b72= Te6edf3ReticulumMeshChatTb4b4b4(
Te6edf3identityTff7b72=Te6edf3mock_rns_minimalTb4b4b4,
Te6edf3storage_dirTff7b72=Te6edf3temp_dirTb4b4b4,
Te6edf3reticulum_config_dirTff7b72=Te6edf3temp_dirTb4b4b4,
Tb4b4b4)
Te6edf3get_handler Tff7b72= Tff7b72None
Te6edf3put_handler Tff7b72= Tff7b72None
Tff7b72for Te6edf3route Tff7b72in Te6edf3appTff7b72.Td2a8ffget_routesTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3routeTff7b72.Td2a8ffpath Tff7b72== Ta5d6ff"Ta5d6ff/api/v1/favourites/layoutTa5d6ff" Tff7b72and Te6edf3routeTff7b72.Td2a8ffmethod Tff7b72== Ta5d6ff"Ta5d6ffGETTa5d6ff"Tb4b4b4:
Te6edf3get_handler Tff7b72= Te6edf3routeTff7b72.Td2a8ffhandler
Tff7b72if Te6edf3routeTff7b72.Td2a8ffpath Tff7b72== Ta5d6ff"Ta5d6ff/api/v1/favourites/layoutTa5d6ff" Tff7b72and Te6edf3routeTff7b72.Td2a8ffmethod Tff7b72== Ta5d6ff"Ta5d6ffPUTTa5d6ff"Tb4b4b4:
Te6edf3put_handler Tff7b72= Te6edf3routeTff7b72.Td2a8ffhandler
Tff7b72assert Te6edf3get_handler Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Te6edf3put_handler Tff7b72is Tff7b72not Tff7b72None
Te6edf3empty Tff7b72= Tff7b72await Te6edf3get_handlerTb4b4b4(Te6edf3MagicMockTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72assert Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3emptyTff7b72.Td2a8ffbodyTb4b4b4)Tb4b4b4[Ta5d6ff"Ta5d6fflayoutTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72None
Te6edf3layout Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4: Tb4b4b4[
Tb4b4b4{Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdefaultTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffFavouritesTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcollapsedTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4}Tb4b4b4,
Tb4b4b4{Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffCustomTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcollapsedTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffsectionOrderTa5d6ff"Tb4b4b4: Tb4b4b4[Ta5d6ff"Ta5d6ffdefaultTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffdefaultTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4: Tb4b4b4[Ta5d6ff"Ta5d6ffaTa5d6ff" Tff7b72* T79c0ff32Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}
Te6edf3body Tff7b72= Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6fflayoutTa5d6ff"Tb4b4b4: Te6edf3layoutTb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3request Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3requestTff7b72.Td2a8ffcontent_length Tff7b72= Tffa657lenTb4b4b4(Te6edf3bodyTb4b4b4)
Te6edf3requestTff7b72.Td2a8ffread Tff7b72= Te6edf3AsyncMockTb4b4b4(Te6edf3return_valueTff7b72=Te6edf3bodyTb4b4b4)
Te6edf3put_response Tff7b72= Tff7b72await Te6edf3put_handlerTb4b4b4(Te6edf3requestTb4b4b4)
Te6edf3put_data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3put_responseTff7b72.Td2a8ffbodyTb4b4b4)
Tff7b72assert Te6edf3put_dataTb4b4b4[Ta5d6ff"Ta5d6fflayoutTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6fffavouritesBySectionTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4] Tff7b72== Tb4b4b4[Ta5d6ff"Ta5d6ffaTa5d6ff" Tff7b72* T79c0ff32Tb4b4b4]
Te6edf3get_response Tff7b72= Tff7b72await Te6edf3get_handlerTb4b4b4(Te6edf3MagicMockTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3get_data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3get_responseTff7b72.Td2a8ffbodyTb4b4b4)
Tff7b72assert Te6edf3get_dataTb4b4b4[Ta5d6ff"Ta5d6fflayoutTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffsectionOrderTa5d6ff"Tb4b4b4] Tff7b72== Tb4b4b4[Ta5d6ff"Ta5d6ffdefaultTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4]
Te6edf3bad_body Tff7b72= Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6fflayoutTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6ffsectionsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4}Tb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3bad Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3badTff7b72.Td2a8ffcontent_length Tff7b72= Tffa657lenTb4b4b4(Te6edf3bad_bodyTb4b4b4)
Te6edf3badTff7b72.Td2a8ffread Tff7b72= Te6edf3AsyncMockTb4b4b4(Te6edf3return_valueTff7b72=Te6edf3bad_bodyTb4b4b4)
Te6edf3bad_response Tff7b72= Tff7b72await Te6edf3put_handlerTb4b4b4(Te6edf3badTb4b4b4)
Tff7b72assert Te6edf3bad_responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff400
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_favourites_layout_put_rejects_oversized_bodyTb4b4b4(Te6edf3mock_rns_minimalTb4b4b4, Te6edf3temp_dirTb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3patchTb4b4b4(Ta5d6ff"Ta5d6ffmeshchatx.meshchat.generate_ssl_certificateTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3app Tff7b72= Te6edf3ReticulumMeshChatTb4b4b4(
Te6edf3identityTff7b72=Te6edf3mock_rns_minimalTb4b4b4,
Te6edf3storage_dirTff7b72=Te6edf3temp_dirTb4b4b4,
Te6edf3reticulum_config_dirTff7b72=Te6edf3temp_dirTb4b4b4,
Tb4b4b4)
Te6edf3put_handler Tff7b72= Tff7b72None
Tff7b72for Te6edf3route Tff7b72in Te6edf3appTff7b72.Td2a8ffget_routesTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3routeTff7b72.Td2a8ffpath Tff7b72== Ta5d6ff"Ta5d6ff/api/v1/favourites/layoutTa5d6ff" Tff7b72and Te6edf3routeTff7b72.Td2a8ffmethod Tff7b72== Ta5d6ff"Ta5d6ffPUTTa5d6ff"Tb4b4b4:
Te6edf3put_handler Tff7b72= Te6edf3routeTff7b72.Td2a8ffhandler
Tff7b72break
Tff7b72assert Te6edf3put_handler Tff7b72is Tff7b72not Tff7b72None
Te6edf3request Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3requestTff7b72.Td2a8ffcontent_length Tff7b72= Te6edf3MAX_LAYOUT_JSON_BYTES Tff7b72+ T79c0ff1
Te6edf3requestTff7b72.Td2a8ffread Tff7b72= Te6edf3AsyncMockTb4b4b4(Te6edf3return_valueTff7b72=Ta5d6ffbTa5d6ff"Tffd700{}Ta5d6ff"Tb4b4b4)
Te6edf3response Tff7b72= Tff7b72await Te6edf3put_handlerTb4b4b4(Te6edf3requestTb4b4b4)
Tff7b72assert Te6edf3responseTff7b72.Td2a8ffstatus Tff7b72== T79c0ff413
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────